﻿using QuanLyThuVien.BLL;
using QuanLyThuVien.DTO;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyThuVien.GUI
{
    public partial class GUITK_SachMuonTheoTL : DevComponents.DotNetBar.Office2007Form
    {
        private BLLTK_MuonSach _bllTK_MuonSach;
        private BLLCTTK_MuonSach _bllCTTK_MuonSach;
        private BLLPhieuMuon _bllPhieuMuon;
        private BLLTheLoai _bllTheLoai;
        private BLLQuyDinh _bllQuyDinh;

        private DTOTK_MuonSach _TKMuonSach;
        private List<DTOCuonSach> _DSCuonSachMuon;

        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public GUITK_SachMuonTheoTL()
        {
            InitializeComponent();
            _bllTK_MuonSach = new BLLTK_MuonSach();
            _bllCTTK_MuonSach = new BLLCTTK_MuonSach();
            _bllPhieuMuon = new BLLPhieuMuon();
            _bllTheLoai = new BLLTheLoai();
            _bllQuyDinh = new BLLQuyDinh();
            _TKMuonSach = new DTOTK_MuonSach();
            _DSCuonSachMuon = new List<DTOCuonSach>();
            ThemTheLoai();
        }

        //----------------------------------------------------------------------
        //Desc: lấy thể loại
        //----------------------------------------------------------------------
        public void ThemTheLoai()
        {
            List<DTOTheLoai> dstheloai = new List<DTOTheLoai>();
            dstheloai = _bllTheLoai.LayDSTheLoai();
            if (dstheloai != null)
            {
                for (int i = 0; i < dstheloai.Count; i++)
                {
                    DTOCTTK_MuonSach cttk = new DTOCTTK_MuonSach();
                    cttk.TheLoai = dstheloai[i];
                    _TKMuonSach.DSCTTKMuonSach.Add(cttk);
                }
            }
        }

        //----------------------------------------------------------------------
        //Desc: hiển thị tháng, năm
        //----------------------------------------------------------------------
        public void HienThiThangNam()
        {
            for (int i = 1; i <= 12; i++)
                _cboThang.Items.Add(i);
            _cboThang.SelectedItem = _cboThang.Items[0];

            object objNgayLapThuVien = _bllQuyDinh.LayNgayLapThuVien();
            DateTime ngaylapthuvien;
            if (objNgayLapThuVien == null)
                ngaylapthuvien = DateTime.Today;
            else
            {
                try
                {
                    ngaylapthuvien = (DateTime)objNgayLapThuVien;
                }
                catch
                {
                    ngaylapthuvien = DateTime.Today;
                }
            }

            long namhientai = DateTime.Today.Year;
            for (long i = ngaylapthuvien.Year; i <= namhientai; i++ )
                _cboNam.Items.Add(i.ToString());
            _cboNam.SelectedItem = _cboNam.Items[0];
        }

        //----------------------------------------------------------------------
        //Desc: hiển thị thông tin thống kê
        //----------------------------------------------------------------------
        public void HienThiThongTinTK()
        { 
            for (int i = 0; i < _TKMuonSach.DSCTTKMuonSach.Count; i++)
                _dgwThongTinTK.Rows.Add(_TKMuonSach.DSCTTKMuonSach[i].TheLoai.TenTheLoai, _TKMuonSach.DSCTTKMuonSach[i].SoLuotMuon, _TKMuonSach.DSCTTKMuonSach[i].TiLe);
            _txtTongSoLuotMuon.Text = _TKMuonSach.TongSoLuotMuon.ToString();
        }

        //----------------------------------------------------------------------
        //Desc: lấy dữ liệu
        //----------------------------------------------------------------------
        public bool LayDuLieuForm()
        {
            long nam;
            int thang;

            try
            {
                nam = long.Parse(_cboNam.Text);
            }
            catch
            {
                MessageBox.Show("Sai dữ liệu năm");
                return false;
            }

            try
            {
                thang = Int32.Parse(_cboThang.Text);
            }
            catch
            {
                MessageBox.Show("Sai dữ liệu tháng");
                return false;
            }

            object obj = _bllQuyDinh.LayNgayLapThuVien();
            DateTime ngaylapthuvien = new DateTime();
            if (obj != null)
            {
                try
                {
                    ngaylapthuvien = (DateTime)obj;
                }
                catch { }
            }

            DateTime ngayhientai = DateTime.Today;
            if ((obj != null && nam < ngaylapthuvien.Year) || nam > ngayhientai.Year)   //năm lập tv là 2014
            {
                MessageBox.Show("Không có dữ liệu");
                return false;
            }

            if (thang < 1 || thang > 12)
            {
                MessageBox.Show("Sai dữ liệu tháng");
                return false;
            }

            if (obj != null && nam == ngaylapthuvien.Year)
            {
                if (obj != null && thang < ngaylapthuvien.Month)    //tháng lập tv là tháng 11/2014
                {
                    MessageBox.Show("Không có dữ liệu");
                    return false;
                }
            }

            if (nam == ngayhientai.Year && thang > ngayhientai.Month)
            {
                MessageBox.Show("Không có dữ liệu");
                return false;
            }
            

            _TKMuonSach.NamTK = nam;
            _TKMuonSach.ThangTK = thang;
            for (int i = 0; i < _TKMuonSach.DSCTTKMuonSach.Count; i++)
            {
                _TKMuonSach.DSCTTKMuonSach[i].NamTK = _TKMuonSach.NamTK;
                _TKMuonSach.DSCTTKMuonSach[i].ThangTK = _TKMuonSach.ThangTK;
            }

            return true;
        }

        //----------------------------------------------------------------------
        //Desc: xóa tất cả thông tin hiển thị
        //----------------------------------------------------------------------
        public void XoaTatCa()
        {
            try
            {
                _dgwThongTinTK.Rows.Clear();
            }
            catch { }

            _TKMuonSach.TongSoLuotMuon = 0;
            for (int i = 0; i < _TKMuonSach.DSCTTKMuonSach.Count; i++)
            {
                _TKMuonSach.DSCTTKMuonSach[i].SoLuotMuon = 0;
                _TKMuonSach.DSCTTKMuonSach[i].TiLe = 0;
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện form load
        //----------------------------------------------------------------------
        private void FormTKSachMuonTheoTL_Load(object sender, EventArgs e)
        {
            HienThiThangNam();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button ThongKe
        //----------------------------------------------------------------------
        private void _btnThongKe_Click(object sender, EventArgs e)
        {
            XoaTatCa();
            if (LayDuLieuForm())
            {
                int kiemtra = _bllTK_MuonSach.KiemTraTonTai(_TKMuonSach);
                if (kiemtra < 0)
                    MessageBox.Show("Không lấy được dữ liệu");
                else if (kiemtra > 0)
                {
                    if (_bllTK_MuonSach.LayDuLieuTK(ref _TKMuonSach))
                    {
                       
                        List<DTOCTTK_MuonSach> dscttkMuonSach = _bllCTTK_MuonSach.LayCTTKMuonSach(_TKMuonSach.ThangTK, _TKMuonSach.NamTK);
                        if (dscttkMuonSach == null)
                            MessageBox.Show("");
                        else
                        {
                            for (int i = 0; i < _TKMuonSach.DSCTTKMuonSach.Count; i++)
                            {
                                for (int j = 0; j < dscttkMuonSach.Count; j++)
                                {
                                    if (_TKMuonSach.DSCTTKMuonSach[i].TheLoai.MaTheLoai == dscttkMuonSach[j].TheLoai.MaTheLoai)
                                    {
                                        _TKMuonSach.DSCTTKMuonSach[i].SoLuotMuon = dscttkMuonSach[j].SoLuotMuon;
                                       _TKMuonSach.DSCTTKMuonSach[i].TiLe = dscttkMuonSach[j].TiLe;
                                        break;
                                    }
                                }
                            }
                        }

                        HienThiThongTinTK();
                    }
                    else
                        MessageBox.Show("Không lấy được dữ liệu thống kê");
                }
                else
                {
                    //lấy dữ liệu thống kê
                    _DSCuonSachMuon.Clear();
                    _DSCuonSachMuon = _bllPhieuMuon.LaySachMuonTrongThang(_TKMuonSach.ThangTK, _TKMuonSach.NamTK);
                    if (_DSCuonSachMuon == null)
                    {
                        MessageBox.Show("Không lấy được danh sách sách mượn trong tháng");
                        return;
                    }

                    _bllTK_MuonSach.TinhLuotMuon_TiLe(ref _TKMuonSach, _DSCuonSachMuon);
                    HienThiThongTinTK();

                    if (_TKMuonSach.NamTK != DateTime.Today.Year || _TKMuonSach.ThangTK != DateTime.Today.Month)
                    {
                        //lưu lại dữ liệu thống kê
                        if (_bllTK_MuonSach.CapNhat(_TKMuonSach))
                        {
                            for (int i = 0; i < _TKMuonSach.DSCTTKMuonSach.Count; i++)
                            {
                                if (_TKMuonSach.DSCTTKMuonSach[i].SoLuotMuon > 0)
                                    _bllCTTK_MuonSach.CapNhat(_TKMuonSach.DSCTTKMuonSach[i]);
                            }
                        }
                        else
                            MessageBox.Show("Lưu dữ liệu thống kê thất bại");
                    }

                }
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Thoat
        //----------------------------------------------------------------------
        private void _btnThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }  
    }
}
